#ifndef XSLSTYLESHEET_H
#define XSLSTYLESHEET_H
#include <iostream>
#include <string>
#include <map>
#include <list>
#include "../XML/Noeud.h"
#include "../XML/Balise.h"

using namespace std;


typedef map<string, Balise*> xslMatchMap_t;

/**
	Classe repésentant une balise XML
*/
class XSLStylesheet {
	private:
		/** structure représentant la feuille de style XSL*/
		Balise* xslStruct;

		/** arbre liant les structures XSL aux noms des balises qu'ils matchent */
		xslMatchMap_t baliseMap;

		Noeud* makeXSLDeepCopy(Noeud* unNoeud);

	public:
		XSLStylesheet(Balise* uneXSLStruct);

		/** retourne la balise static contante applyTempates */
		Balise* getApplyTemplates() const;

		/** 
			Place la liste des fils de la balise XSLtemplate matchant nomBalise dans listeFils;
			La liste est vidée avant le remplissage. La liste n'est pas vidée si aucun match n'est trouvé
			retourne vrai si on trouve une balise matchant nomBalise, faux sinon
			Toutes les balise nommée xsl:apply-template son remplacée par la balise singleton renvoyée par getApplyTemplates
		*/
		bool getCopiePTemplateContent(string nomBalise, list<Noeud*> & listeFilsRef);


};

#endif
